<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
    <meta name="referrer" content="never">
    <title>正则的属性</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        ul {
            list-style: none;
        }
    </style>
</head>
<body>
    
    <script type="text/javascript">
        /* 
        正则的属性
            .lastIndex   标识正则开始匹配的下标
            .test(string)  校验字符串中是否含有正则的模板内容，返回布尔值
            .exec(string)  返回字符串中符合正则模板内容的起始下标，如果没有，返回null
                返回值受 g 属性影响：
                    没有 g  属性，总是返回第一个匹配内容相关信息
                    有 g 属性，会循环字符串返回 匹配内容 相关信息

            str.match(reg)  返回字符串中符合正则模板内容的起始下标，如果没有，返回null
                返回值受 g 属性影响：
                    没有 g  属性，总是返回第一个匹配内容相关信息
                    有 g 属性，会返回所有 匹配内容 组成的数组，没有位置等相关信息
        */

        var str = "abcabifadabtykirkeab";

        var reg = /ab/,
            abcdReg = /abcd/,
            withGReg = /ab/g;

        console.log(reg.test(str)); // true
        console.log(abcdReg.test(str)); // false

        console.log("exec");
        console.log(reg.exec(str)); // ["ab", 0, ...]
        console.log(reg.exec(str)); // ["ab", 0, ...]
        console.log(reg.exec(str)); // ["ab", 0, ...]

        console.log("abcdReg", abcdReg.exec(str)); // null

        console.log("with g 属性  global");
        console.log("withGReg.lastIndex",withGReg.lastIndex); // 0
        console.log(withGReg.exec(str)); // ["ab", 0]
        console.log("withGReg.lastIndex",withGReg.lastIndex); // 2
        console.log(withGReg.exec(str)); // ["ab", 3]
        console.log("withGReg.lastIndex",withGReg.lastIndex); // 5
        console.log(withGReg.exec(str)); // ["ab", 9]
        console.log("withGReg.lastIndex",withGReg.lastIndex); // 11
        console.log(withGReg.exec(str)); // ["ab", 18]
        console.log("withGReg.lastIndex",withGReg.lastIndex); // 20
        console.log(withGReg.exec(str)); // null
        // exec 遇到 null 之后，回到 0，重新循环
        console.log("withGReg.lastIndex",withGReg.lastIndex); // 0
        console.log(withGReg.exec(str)); // ["ab", 0]

        console.clear(); // 清空上方 console.log 输出的内容

        console.log(str.match(reg)); // ["ab", 0 ...]
        console.log(str.match(abcdReg)); // null
        console.log(str.match(withGReg)); // ["ab", "ab", "ab", "ab"]
    </script>
</body>
</html>